<?php
require_once "../conexion/conexion.php";
header('Content-Type: application/json');

// DEBUG: Agregar esto para ver qué datos llegan
$debug = [
    'POST_completo' => $_POST,
    'fecha_inicio_recibida' => isset($_POST['fecha_inicio']) ? $_POST['fecha_inicio'] : 'NO_EXISTE',
    'fecha_fin_recibida' => isset($_POST['fecha_fin']) ? $_POST['fecha_fin'] : 'NO_EXISTE'
];

// Escribir el debug a un archivo para verlo
file_put_contents('debug_fechas.txt', json_encode($debug, JSON_PRETTY_PRINT) . "\n\n", FILE_APPEND);

// Parámetros de DataTables
$draw = isset($_POST['draw']) ? intval($_POST['draw']) : 1;
$start = isset($_POST['start']) ? intval($_POST['start']) : 0;
$length = isset($_POST['length']) ? intval($_POST['length']) : 10000;
$columnIndex = isset($_POST['order'][0]['column']) ? intval($_POST['order'][0]['column']) : 0;
$columnName = isset($_POST['columns'][$columnIndex]['data']) ? $_POST['columns'][$columnIndex]['data'] : 'id_registro';
$direction = isset($_POST['order'][0]['dir']) ? $_POST['order'][0]['dir'] : 'DESC';

// Validar nombre de columna
$columnasValidas = ['id_registro', 'temperatura', 'fecha', 'hora'];
if (!in_array($columnName, $columnasValidas)) {
    $columnName = 'id_registro';
}

// Búsqueda general
$search = isset($_POST['search']['value']) ? $_POST['search']['value'] : '';
$search = $conexion->quote('%' . $search . '%');

// Fechas (desde el frontend)
$fechaInicio = isset($_POST['fecha_inicio']) ? $_POST['fecha_inicio'] : '';
$fechaFin = isset($_POST['fecha_fin']) ? $_POST['fecha_fin'] : '';

// DEBUG: Agregar más información
$debug2 = [
    'fechas_antes_conversion' => [
        'inicio' => $fechaInicio,
        'fin' => $fechaFin,
        'inicio_vacio' => empty($fechaInicio),
        'fin_vacio' => empty($fechaFin)
    ]
];
file_put_contents('debug_fechas.txt', "ANTES DE CONVERSIÓN: " . json_encode($debug2, JSON_PRETTY_PRINT) . "\n", FILE_APPEND);

// Convertir formato de fechas (dd/mm/yyyy → yyyy-mm-dd)
$fechaInicioConvertida = '';
$fechaFinConvertida = '';

if (!empty($fechaInicio) && !empty($fechaFin)) {
    // Intentar conversión con diferentes formatos
    $fechaInicioObj = DateTime::createFromFormat('d/m/Y', $fechaInicio);
    $fechaFinObj = DateTime::createFromFormat('d/m/Y', $fechaFin);
    
    // Si falla con d/m/Y, intentar con j/n/Y (sin ceros iniciales)
    if (!$fechaInicioObj) {
        $fechaInicioObj = DateTime::createFromFormat('j/n/Y', $fechaInicio);
    }
    if (!$fechaFinObj) {
        $fechaFinObj = DateTime::createFromFormat('j/n/Y', $fechaFin);
    }
    
    if ($fechaInicioObj && $fechaFinObj) {
        $fechaInicioConvertida = $fechaInicioObj->format('Y-m-d');
        $fechaFinConvertida = $fechaFinObj->format('Y-m-d');
        
        // DEBUG: Fechas después de conversión
        file_put_contents('debug_fechas.txt', "CONVERSIÓN EXITOSA - Inicio: $fechaInicioConvertida, Fin: $fechaFinConvertida\n", FILE_APPEND);
    } else {
        // DEBUG: Error en conversión
        $errores = [];
        if (!$fechaInicioObj) $errores[] = "Error convirtiendo fecha inicio: $fechaInicio";
        if (!$fechaFinObj) $errores[] = "Error convirtiendo fecha fin: $fechaFin";
        
        file_put_contents('debug_fechas.txt', "ERROR EN CONVERSIÓN: " . implode(", ", $errores) . "\n", FILE_APPEND);
        
        // Intentar mostrar el último error de DateTime
        $errors = DateTime::getLastErrors();
        if ($errors && !empty($errors['errors'])) {
            file_put_contents('debug_fechas.txt', "Errores DateTime: " . json_encode($errors) . "\n", FILE_APPEND);
        }
    }
}

// Construcción del WHERE dinámico
$where = "WHERE 1";
$parametros = [];

if ($search != "''") {
    $where .= " AND (temperatura LIKE $search OR fecha LIKE $search)";
}

if (!empty($fechaInicioConvertida) && !empty($fechaFinConvertida)) {
    $where .= " AND (fecha >= :fechaInicio AND fecha <= :fechaFin)";
    $parametros['fechaInicio'] = $fechaInicioConvertida;
    $parametros['fechaFin'] = $fechaFinConvertida;
    
    // Agregar una consulta de prueba para ver qué fechas tienes realmente
    $testQuery = "SELECT MIN(fecha) as fecha_minima, MAX(fecha) as fecha_maxima, COUNT(*) as total FROM registros_tempreatura WHERE fecha >= '$fechaInicioConvertida' AND fecha <= '$fechaFinConvertida'";
    $testResult = $conexion->query($testQuery)->fetch(PDO::FETCH_ASSOC);
    
    // También verificar el rango completo de fechas en la tabla
    $rangeQuery = "SELECT MIN(fecha) as fecha_minima_total, MAX(fecha) as fecha_maxima_total, COUNT(*) as total_registros FROM registros_tempreatura";
    $rangeResult = $conexion->query($rangeQuery)->fetch(PDO::FETCH_ASSOC);
    
    file_put_contents('debug_fechas.txt', "WHERE con fechas: $where\n", FILE_APPEND);
    file_put_contents('debug_fechas.txt', "Parámetros: " . json_encode($parametros) . "\n", FILE_APPEND);
    file_put_contents('debug_fechas.txt', "Test query filtrada: " . json_encode($testResult) . "\n", FILE_APPEND);
    file_put_contents('debug_fechas.txt', "Rango completo tabla: " . json_encode($rangeResult) . "\n", FILE_APPEND);
} else {
    file_put_contents('debug_fechas.txt', "NO SE AGREGÓ FILTRO DE FECHAS - fechas vacías después de conversión\n", FILE_APPEND);
}

// Total de registros (sin filtros)
$stmt = $conexion->query("SELECT COUNT(*) as total FROM registros_tempreatura");
$totalRecords = $stmt->fetch(PDO::FETCH_ASSOC)['total'];

// Total de registros con filtros
$sqlCount = "SELECT COUNT(*) as total FROM registros_tempreatura $where";
$stmtCount = $conexion->prepare($sqlCount);

// Bind parámetros para el count
foreach ($parametros as $key => $value) {
    $stmtCount->bindParam(":$key", $parametros[$key], PDO::PARAM_STR);
}

$stmtCount->execute();
$totalFiltered = $stmtCount->fetch(PDO::FETCH_ASSOC)['total'];

// DEBUG: Resultados del count
file_put_contents('debug_fechas.txt', "Total registros sin filtros: $totalRecords\n", FILE_APPEND);
file_put_contents('debug_fechas.txt', "Total registros con filtros: $totalFiltered\n", FILE_APPEND);

// Consulta principal con orden y paginación
$sql = "SELECT id_registro, temperatura, fecha, hora 
        FROM registros_tempreatura 
        $where 
        ORDER BY $columnName $direction 
        LIMIT :start, :length";

file_put_contents('debug_fechas.txt', "SQL final: $sql\n", FILE_APPEND);

$stmt = $conexion->prepare($sql);
$stmt->bindParam(':start', $start, PDO::PARAM_INT);
$stmt->bindParam(':length', $length, PDO::PARAM_INT);

// Bind parámetros de fechas para la consulta principal
foreach ($parametros as $key => $value) {
    $stmt->bindParam(":$key", $parametros[$key], PDO::PARAM_STR);
}

$stmt->execute();

// Arreglo de resultados
$data = [];
$contador = 0;
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $data[] = [
        'id' => $row['id_registro'],
        'temperatura' => $row['temperatura'],
        'fecha' => $row['fecha'],
        'hora' => $row['hora']
    ];
    $contador++;
}

// DEBUG: Resultados finales
file_put_contents('debug_fechas.txt', "Registros devueltos: $contador\n", FILE_APPEND);
if ($contador > 0) {
    file_put_contents('debug_fechas.txt', "Primer registro: " . json_encode($data[0]) . "\n", FILE_APPEND);
}
file_put_contents('debug_fechas.txt', "------- FIN DEBUG -------\n\n", FILE_APPEND);

// Respuesta JSON para DataTables
$response = [
    'draw' => $draw,
    'iTotalRecords' => $totalRecords,
    'iTotalDisplayRecords' => $totalFiltered,
    'data' => $data
];

echo json_encode($response);
?>